package com.haixinga.commbiz.commons.vo;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;

import java.io.Serializable;

/**
 * @description: 通用Model
 * @Author terrfly
 * @Date 2020/02/18 17:28
 */
public class BaseModel<T> implements Serializable{

	private static final long serialVersionUID = 1L;

	/** ps参数,  用作自定义属性， 会在对象中包含  ps对象   **/
	/** ext参数, 用作扩展参数， 会在转换为api数据时自动将ext全部属性放置在对象的主属性上, 并且不包含ext属性   **/


	@TableField(exist = false)
	private JSONObject ps ; //ps = 简化Properties

	/** 务必添加set方法， 否则 页面传参为ps[xxx]  使用getObject则无法正常转换 */
	public void setPs(JSONObject ps) {
		this.ps = ps;
	}

	/** 务必添加get方法， 否则ApiResBodyAdvice 转换为JSONObject格式后自动忽略掉ps字段 **/
	public JSONObject getPs() {
		return ps;
	}

	/** get ps value  可直接使用JSONObject对象的函数 **/
	public JSONObject psv() {
		return ps == null ? new JSONObject() : ps;
	}

	/** 设置ps值 */
	public void setPsVal(String key, Object value){
		if(ps == null){
			ps = new JSONObject();
		}
		ps.put(key, value);
	}


	/** api接口扩展字段， 当包含该字段时 将自动填充到实体对象属性中如{id:1, ext:{abc:222}}  则自动转换为： {id:1, abc:222}，
	 *  需配合ResponseBodyAdvice使用
	 *  **/
	@TableField(exist = false)
	private JSONObject ext;

	//获取的时候设置默认值
	public JSONObject getExt() {
		return ext;
	}

	//设置扩展字段
	public void addExt(String key, Object val) {

		if(ext == null) ext = new JSONObject();
		ext.put(key,val);
	}

	/** get ext value  可直接使用JSONObject对象的函数 **/
	public JSONObject extv() {
		return ext == null ? new JSONObject() : ext;
	}


}
